<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>节流(throttle)</title>
</head>

<body>
    <div id='show'>0</div>
    <button id='btn'>click</button>
    <script>
        var oDiv = document.getElementById("show");
        var oBtn = document.getElementById("btn");
        //节流函数
        function throttle(handler, wait) {
            let lastTime = 0;
            return function (e) {
              //现在点击的时间
              //arguments [event] 第0位
              var nowTime = new Date().getTime();
              if (nowTime - lastTime > wait) {
                  handler.apply(this, arguments)
                  lastTime = nowTime
              }
            }
        }

        function buy(e) {
                oDiv.innerText = parseInt(oDiv.innerText) + 1;
        }

        console.log(oBtn.onclick = throttle(buy, 1000));
    </script>
    <!--
  节流:
           函数节流就是预定一个函数只有在大于等于执行周期时才执行, 周期内调用不执行。好像水攒到一定数量
        才会落下一样。
  使用场景:
          窗口调整(resize)

          页面滚动(scroll)

          抢购疯狂点击(mousedown)

   防抖 节流的区别:

   共同点: 防抖和节流的作用都是防止函数多次调用

   区别:  函数节流不管事件触发有多频繁，都会保证在规定时间内一定会执行一次真正的事件处理函数，
         而函数防抖只是在最后一次事件后才触发一次函数。 比如在页面的无限加载场景下，
         我们需要用户在滚动页面时，每隔一段时间发一次 Ajax 请求，而不是在用户停下滚动页面
         操作时才去请求数据。这样的场景，就适合用节流技术来实现。

   简单的解释:
      防抖:  以用户多次触发事件后的最后一次，才会执行一次事件函数
      节流:  不管用户触发多少次事件，都会每隔规定好的时间内执行一次

       防抖就是多次事件时只执行最后的那一次  节流就是一段时间内只执行一次


 -->
</body>

</html>